package com.example.doc_search_yuandaima;

import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.ToAnalysis;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

public class DocSearcher {
    private Index index = new Index();
public DocSearcher(){
    index.load();
}
//完成整个搜索过程的方法
    //参数(输入部分)就是用户给出的查询词
    //返回值(输出部分)就是搜索结果的集合
    public List<Result> search(String query){
    //1.[分词] 针对query这个查询进行分词
        List<Term> terms = ToAnalysis.parse(query).getTerms();
    //2.[触发] 针对粉刺结果来查看倒排
        List<Weight> allTermResult = new ArrayList<>();
        for(Term term:terms){
            String word = term.getName();
            //虽然倒排索引中,有很多的词,但是这里 的词一定都是之前的文档中存在的.
            List<Weight> invertrdList = index.getInverted(word);
            if(invertrdList==null){
                continue;
            }
            allTermResult.addAll(invertrdList);
        }
        //3.[排序] 针对触发的结果按照权重降序排序
        allTermResult.sort(new Comparator<Weight>() {
            @Override
            public int compare(Weight o1, Weight o2) {
                //升序就是1-2
                //降序就是2-1
                return o2.getWeight()- o1.getWeight();
            }
        });
    //4.[包装结果] 针对排序的结果,去查正排,构造出来要返回的数据
    return null;
    }
}
